import { _decorator, Component } from 'cc'
const { ccclass } = _decorator
// TileManager是处理单个瓦片的类。
import { TileManager } from 'db://assets/Ts/Tile/TileManager'
import { createUINode, randomByRange } from 'db://assets/utils/index'
import DataManager from 'db://assets/Runtime/DataManager'
import ResourceManager from 'db://assets/Runtime/ResourceManager'
@ccclass('TileMapManager')
export class TileMapManager extends Component {
  async init() {
    // 首先获取第一个关卡的地图信息（mapInfo）
    // 然后调用loadRes方法加载所有瓦片的精灵帧资源。
    // console.log( ResourceManager.Instance,  DataManager.Instance)
    const spriteFrames = await ResourceManager.Instance.loadDir('texture/tile/tile')
    const { mapInfo } = DataManager.Instance
    DataManager.Instance.tileInfo = []
    // 使用双重循环遍历地图信息，检查每个瓦片的信息，并创建相应的UI节点。
    for (let i = 0; i < mapInfo.length; i++) {
      DataManager.Instance.tileInfo[i] = []
      const column = mapInfo[i]
      for (let j = 0; j < column.length; j++) {
        const item = column[j]
        if (item.src == null || item.type == null) {
          continue
        }
        // 创建UI节点
        const node = createUINode()
        let number = item.src
        if ((number === 1 || number === 5 || number === 9) && i % 2 === 0 && j % 2 === 0) {
          number += randomByRange(0, 4)
        }
        // console.log(object);
        // 获取瓦片的精灵帧
        const imgSrc = `tile (${number})`
        // 对于每个有效的瓦片，创建一个新的UI节点并为其添加TileManager组件，
        const spriteFrame = spriteFrames.find(v => v.name === imgSrc) || spriteFrames[0]
        // 添加TileManager组件
        const tileManager = node.addComponent(TileManager)
        const type = item.type
        // 初始化时传入对应的精灵帧以及瓦片的行列索引。
        tileManager.init(type, spriteFrame, i, j)
        DataManager.Instance.tileInfo[i][j] = tileManager
        // 将节点添加到场景中
        node.setParent(this.node)
      }
    }
  }
}
